package lexer;

%%

%class ExpressionLexer
%type Token

%line
%column

%{
  public static final String DEFAULT_UNIT = "unknown unit"; 
  private String unit = DEFAULT_UNIT;

  public ExpressionLexer(java.io.Reader reader, String unit) {
  	this(reader);
  	this.unit = unit;
  } 

  Token token(TokenType type) {
    return new Token(type, yytext(), yyline + 1, yycolumn + 1, unit);
  }

  public boolean hasReadEOF() {
    return zzAtEOF;
  } 
%}

%%

<YYINITIAL> {
  ")" { return token(TokenType.CLOSE_PAREN); }
  "(" { return token(TokenType.OPEN_PAREN); }
  "%" { return token(TokenType.MODULO); }
  "/" { return token(TokenType.DIVIDE); }
  "*" { return token(TokenType.TIMES); }
  "-" { return token(TokenType.MINUS); }
  "+" { return token(TokenType.PLUS); }
  [0-9]* { return token(TokenType.INTEGER_LITERAL); }
}
